Map Interface


    Map
Map Interface는 자료를 쌍(pair)로 관리하는 데 필요한 메서드가 정의되어 있다.
key-value 쌍으로 이루어진 객체의 key 값은 유일하며 value 값은 중복될 수 있다.

Map Interface를 구현한 클래스는 내부적으로 해시 알고리즘에 의해 구현되어 있다.
    HashMap
index=hash(key)

HashMap은 Hash 방식을 이용하여 자료를 관리한다.
Hash 방식은 자료 추가 속도나 검색 속도가 상당히 빠르다.
하지만 서로 다른 key 값에 대하여 같은 index가 반환되는 충돌(collision)이 발생하는 경우도 있다.
따라서 해시 테이블에 데이터를 꽉 채우지 않고 적정 수준이 되면 테이블을 확장해 준다.
key 값은 중복될 수 없으므로, equals() 와 hashcode()메서드를 재정의하여 사용하는 것이 좋다.
MemberHashMap.java
package map.hashmap;
import java.util.HashMap;
import java.util.Iterator;
import collection.Member;
public class MemberHashMap {
private HashMap<Integer,Member> hashMap;
public MemberHashMap() {
hashMap=new HashMap<Integer,Member>();
}
public void addMember(Member member) {
hashMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId) {
if(hashMap.containsKey(memberId)){
hashMap.remove(memberId);
return true;
}
System.out.println(memberId+" .");
return false;
}
public void showAllMember() {
Iterator<Integer> ir=hashMap.keySet().iterator();
while(ir.hasNext()) {
int key=ir.next();
Member member=hashMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
MemberHashMapTest.java
package map.hashmap;
import collection.Member;
public class MemberHashMapTest{
public static void main(String[] args) {
MemberHashMap memberHashMap=new MemberHashMap();
Member memberLee=new Member(1001, "");
Member memberSon=new Member(1002, "");
Member memberPark=new Member(1003, "");
Member memberHong=new Member(1004, "");
memberHashMap.addMember(memberLee);
memberHashMap.addMember(memberSon);
memberHashMap.addMember(memberPark);
memberHashMap.addMember(memberHong);
memberHashMap.showAllMember();
memberHashMap.removeMember(1004);
memberHashMap.showAllMember();
}
}

이지원회원님의 아이디는 1001 입니다.

손민국회원님의 아이디는 1002 입니다.

박서훤회원님의 아이디는 1003 입니다.

홍길동회원님의 아이디는 1004 입니다.


이지원회원님의 아이디는 1001 입니다.

손민국회원님의 아이디는 1002 입니다.

박서훤회원님의 아이디는 1003 입니다.

java에는 HashMap과 Hashtable 모두 쌍(pair)로 이루어진 자료를 관리하는데 사용된다.
Hashtable은 List의 Vector 클래스처럼 멀티스레드를 위 동기화를 제공한다.
    TreeMap
same as TreeSet have to implements Comparable or Comparator
하지만 우리가 사용할 코드에서는 Comparable 을 Integer 을 이용해서 한다.
Integer class에는 이미 Coomparable interface가 구현되어 있다.
MemberTreeMap.java
package map.treemap;
import java.util.Iterator;
import java.util.TreeMap;
import collection.Member;
public class MemberTreeMap {
private TreeMap<Integer,Member> treeMap;
public MemberTreeMap() {
treeMap=new TreeMap<Integer,Member>();
}
public void addMember(Member member) {
treeMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId) {
if(treeMap.containsKey(memberId)) {
treeMap.remove(memberId);
return true;
}
System.out.println(memberId+" .");
return false;
}
public void showAllMember() {
Iterator<Integer> ir=treeMap.keySet().iterator();
while(ir.hasNext()) {
int key=ir.next();
Member member=treeMap.get(key);
System.out.println(member);
}
System.out.println();
}
}
MemberTreeMapTest.java
package map.treemap;
import collection.Member;
public class MemberTreeMapTest {
public static void main(String[] args) {
MemberTreeMap memberHashMap=new MemberTreeMap();
Member memberPark=new Member(1003,"");
Member memberLee=new Member(1001,"");
Member memberHong=new Member(1004,"");
Member memberSon=new Member(1002,"");
memberHashMap.addMember(memberPark);
memberHashMap.addMember(memberLee);
memberHashMap.addMember(memberHong);
memberHashMap.addMember(memberSon);
memberHashMap.showAllMember();
memberHashMap.removeMember(1004);
memberHashMap.showAllMember();
}
}

이지원회원님의 아이디는 1001 입니다.

손민국회원님의 아이디는 1002 입니다.

박서훤회원님의 아이디는 1003 입니다.

홍길동회원님의 아이디는 1004 입니다.


이지원회원님의 아이디는 1001 입니다.

손민국회원님의 아이디는 1002 입니다.

박서훤회원님의 아이디는 1003 입니다.